package com.guomei.mapper.curse;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.guomei.bean.exam.domain.Exam;
import com.guomei.bean.exam.vo.ExamPager;

import javax.validation.constraints.NotBlank;
import java.util.List;

/**
 * 考试表数据访问接口
 */
@Mapper
public interface ExamMapper extends BaseMapper<Exam> {
    /**
     * 根据ID查询考试
     * @param id 考试ID
     * @return 考试信息
     */
    Exam selectById(Long id);

    /**
     * 查询所有考试
     * @return 考试列表
     */
    List<Exam> selectAll();

    /**
     * 根据条件查询考试
     * @param exam 考试查询条件
     * @return 考试列表
     */
    List<Exam> selectByCondition(Exam exam);

    /**
     * 新增考试
     * @param exam 考试信息
     * @return 影响行数
     */
    int insert(Exam exam);

    /**
     * 批量新增考试
     * @param exams 考试列表
     * @return 影响行数
     */
    int batchInsert(@Param("exams") List<Exam> exams);

    /**
     * 根据ID更新考试
     * @param exam 考试信息
     * @return 影响行数
     */
    int updateById(Exam exam);

    /**
     * 根据ID删除考试
     * @param id 考试ID
     * @return 影响行数
     */
    int deleteById(Long id);

    /**
     * 批量删除考试
     * @param ids 考试ID列表
     * @return 影响行数
     */
    int batchDelete(@Param("ids") List<Long> ids);

    /**
     * 根据课程ID查询考试列表
     * @param courseId 课程ID
     * @return 考试列表
     */
    List<Exam> selectByCourseId(@Param("courseId") Long courseId);

    /**
     * 根据创建人ID查询考试列表
     * @param creatorId 创建人ID
     * @return 考试列表
     */
    List<Exam> selectByCreatorId(@Param("creatorId") Long creatorId);

    /**
     * 根据状态查询考试列表
     * @param status 状态
     * @return 考试列表
     */
    List<Exam> selectByStatus(@Param("status") Short status);

    /**
     * 根据考试ID查询考试详情
     * @param examId 考试ID
     * @return 考试详情
     */
    ExamPager selectByIdWithQuestions(@Param("examId") Long examId);

    /**
     * 根据课程ID列表查询考试列表
     * @param courseIds 课程ID列表
     * @return 考试列表
     */
    List<Exam> selectByCourseIds(@Param("courseIds") List<Long> courseIds);

    Exam selectByOrderNo(@Param("outTradeNo") String outTradeNo);
}
